<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
    <!-- 

    promise 可以解决回调地狱问题

    promise 是个构造函数  用来创建对象的

     -->

     <script>
        // 创建一个promise对象
        // promise这个含糊的参数是一个函数（回调函数）这个函数内的代码
        //回调函数也是两个参数也是函数
        var p = new Promise(function (resolve,reject) {
            // 这个函数内的代码会被同步执行
            console.log("一行代码");
            // 用来封装异步代码
            //Ajax 异步的js与xml 异步的请求
            $.ajax({
                type:"get",
                url:"https://cnodejs.org/api/v1/topics",
                data:{
                    page:1
                },
                success(data) {
                    // console.log(data);
                    //在成功后调用的函数
                    resolve(data)
                },
                error(err) {
                    // console.log(err);
                    // 在失败后调用的函数
                    reject("错误2222")
                }
            })
        });
        //promise代码 从发生状态更改
         // 由pending等待中更改为 fulfilled成功 或 reject失败

         // console.log("----");
        // console.log(p);
        // setTimeout(function(){
        //     console.log(p);
        // },6000)

        // .then()用来接收promise内部代码执行完成后的结构
        // .then的参数1  会在resolve（）函数调用后执行 会接收resolve()传递的数据
        p.then(function (res) {
            console.log(res);
        },function (err) {
            console.log(err);
        })
        // .catch()用来接收promise内部代码执行完成后的结果
        // 参数1 会在reject（）函数调用执行 会接收reject（）传递的数据
        p.then(function (res) {
            console.log(res);
        }).catch(function (err){
            console.log(err);
        })
        p.then(function(res){
            console.log(res);
        })
        p.then(function(res){
            console.log(res);
        })


        // function Aa(fun){
        //     console.log("---");
        //     for(var i = 0;i < 1000;i++){
        //         console.log("?????");
        //     }
        //     fun()
            
        // }
        // var a = new Aa(function(){
        //     console.log("+++");
        //     for(var i = 0;i < 1000;i++){
        //         console.log("++++?????");
        //     }
        // });

        // console.log("===");

     </script>
</body>
</html>